package tech.aistar.day02.method;

/**
 * 本类用来演示:
 *
 * @author: success
 * @date: 2021/3/5 1:47 下午
 */
public class HelloMethod01 {

    //main - 主入口
    public static void main(String[] args) {

       //可以在main方法中去调用自定义的方法
        //静态方法 - 直接使用类名.方法名([参数])
        HelloMethod01.test01();

        //如果方法的调用者和方法的定义者在同一个类文件中
        //简单的语法 - 静态方法中可以直接调用静态方法 - 省略了类名
        test01();


        //非静态方法的调用 -> 对象.方法名([参数])
        //调用哪个类中的方法 - 就去创建哪个类的对象
        //创建对象的语法 - 类名 对象名 = new 类名();

        //创建HelloMethod01这个类的对象,m就是对象的名称
        HelloMethod01 m = new HelloMethod01();
        m.test02();

        //埋个种子 - "static"
        //1. static本身是静态的意思,static修饰的方法属于类的.非static修饰的方法属于对象的
        //属于谁,就由谁去调用.

        //word + ctrl+s -> 将内存中的数据把它持久化到磁盘上 .

        //2. 因为static关键字的作用 - 当JVM加载类进内存的,凡是使用static关键字修饰的成员[方法/属性]
        // 就会被立即分配空间以及初始化

        //结论:静态成员何时被初始化? - 当JVM加载类进内存的时候.

        //3. 非静态的成员是何时被分配空间和初始化的呢???
        // 当程序中遇到创建对象的语法,通过new关键字在JVM的堆中开辟区域并且进行初始化.

        //思考 - ①静态方法中为什么可以直接调用静态方法?

        //      ②静态方法中为什么不可以直接调用非静态方法?
        //      ③非静态方法为什么不可以直接使用类名.方法这种方式进行调用呢? - 因为连对象都没有,而非静态的成员是属于对象.

    }


//    定义一个公开的静态的无返回类型的空参的方法
    public static void test01(){
        //方法体 - 封装的业务代码的
        System.out.println("test01...");
    }

    //定义一个公开的非静态的无返回类型的空参的方法
    public void test02(){
        System.out.println("test02...");
    }
}
